<template>
  <el-form :model="loginForm" :rules="rules2" ref="loginForm" label-position="left" label-width="0px" class="demo-ruleForm login-container">
    <h3 class="title">系统登录</h3>
    <el-form-item prop="username">
      <el-input type="text" v-model="loginForm.username" auto-complete="off" placeholder="账号"></el-input>
    </el-form-item>
    <el-form-item prop="password">
      <el-input type="password" v-model="loginForm.password" auto-complete="off" placeholder="密码"></el-input>
    </el-form-item>
    <el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox>
    <el-form-item style="width:100%;">
      <el-button type="primary" style="width:47%;" @click.native.prevent="loginSubmit" :loading="logining">登录</el-button>
      <el-button type="success" style="width:47%;" @click.native.prevent="goToShopRegister" :loading="logining">店铺入驻</el-button>
      <!--<el-button @click.native.prevent="handleReset2">重置</el-button>-->
    </el-form-item>
  </el-form>
</template>

<script>
  import { requestLogin } from '../api/api';
  //import NProgress from 'nprogress'
  export default {
    data() {
      return {
        logining: false,
        loginForm: {
          username: '', // 要进行数据的双向绑定
          password: '', // 要进行数据的双向绑定
            // 后台登录肯定是管理员，所以设置一个默认类型为0管理员（前后台登录是共用一个接口，便于进行判断）
            type:0,
        },
        rules2: {
            username: [
            { required: true, message: '请输入账号', trigger: 'blur' },
            //{ validator: validaePass }
          ],
            password: [
            { required: true, message: '请输入密码', trigger: 'blur' },
            //{ validator: validaePass2 }
          ]
        },
        checked: true
      };
    },
    methods: {
        // 添加动态追加路由函数，添加菜单
        // 动态添加路由函数
        initIndexRouters() {
            if (!localStorage.menus) {
                return;
            }
            //防止重复配置路由：5就是main.js中路由的个数 - 如果你的静态路由是6个这里要写成6
            if (this.$router.options.routes.length > 6) {
                return;
            }
            let menus = localStorage.getItem('menus');
            menus = JSON.parse(menus);
            let tempRouters = [];
            menus.forEach(menu => {
                let indexRouter = {
                    path: '/',
                    iconCls: menu.icon,
                    name: menu.name,
                    component: resolve => require(['@/views/Home'], resolve),
                    children: []
                }
                menu.children.forEach(cMenu => {
                    let cr = {
                        path: cMenu.url,
                        name: cMenu.name,
                        component: resolve => require(['@/views/' + cMenu.component], resolve)
                    }
                    indexRouter.children.push(cr)
                })
                tempRouters.push(indexRouter)
                this.$router.options.routes.push(indexRouter)
            })
            //动态路由配置
            this.$router.addRoutes(tempRouters);
        },



        // 给店铺入驻按钮绑定点击事件，点击店铺入驻按钮就跳转到店铺入驻的详细列表页面
        goToShopRegister(){
            this.$router.push({ path: '/shopRegister' });
        },

      handleReset2() {
        this.$refs.loginForm.resetFields();
      },
        // 发送后台登录的请求
      loginSubmit(ev) {
        this.$refs.loginForm.validate((valid) => {
          if (valid) {
            this.logining = true;
            var para = { username: this.loginForm.username, password: this.loginForm.password, type: this.loginForm.type };
           
            // 向后端发送后台登录的请求
              this.$http.post("/login/account",para)
                  .then(result=>{
                      let res = result.data;
                      if(res.success){
                          //走到这里说明请求后端接口成功，并且业务处理成功
                          // 关闭盲等
                          this.logining = false;

                          // 将后端返回的token和logininfo保存到localstorage
                          let {token, logininfo,permissions,menus} = res.resultObj; // 通过解构表达式将后端返回的对象进行解构?
                          localStorage.setItem("token", token);
                          // 注意此处返回的logininfo是一个对象，前端获取到以后是把对象转为了字符串存到localstorage,如果要在前台取值展示，要在转为对象后取值展示
                          localStorage.setItem("logininfo", JSON.stringify(logininfo));
                          // 保存菜单和权限信息
                          localStorage.setItem("permissions", JSON.stringify(permissions));
                          localStorage.setItem("menus", JSON.stringify(menus));

                          // 用户登录成功之后，调用动态追加路由函数，根据用户菜单权限，动态展示菜单
                          this.initIndexRouters();

                          // 跳转到echarts页面
                          this.$router.push({path: '/echarts'});

                          // 给出提示
                          this.$message({
                              message: "登录成功！",
                              type: 'success'
                          });

                      }else{
                          // 走到这里说明请求后端接口成功，但业务处理失败
                          // 关闭盲等
                          this.logining = false;
                          this.$message({
                              message: res.msg,
                              type: 'error'
                          });
                      }

                  })
                  .catch(res=>{
                      // 关闭盲等
                      this.logining = false;
                      this.$message({
                          message: "请求后端接口失败！",
                          type: 'error'
                      });

                  })
          } else {
              this.$message({
                  message: "前端参数校验失败！",
                  type: 'error'
              });
          }
        });
      }
    }
  }

</script>

<style lang="scss" scoped>
  .login-container {
    /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/
    -webkit-border-radius: 5px;
    border-radius: 5px;
    -moz-border-radius: 5px;
    background-clip: padding-box;
    margin: 180px auto;
    width: 350px;
    padding: 35px 35px 15px 35px;
    background: #fff;
    border: 1px solid #eaeaea;
    box-shadow: 0 0 25px #cac6c6;
    .title {
      margin: 0px auto 40px auto;
      text-align: center;
      color: #505458;
    }
    .remember {
      margin: 0px 0px 35px 0px;
    }
  }
</style>